package tecnicas;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Hashtable;

import datosFamilias.*;

public class Heuristica extends TecnicaAbstracta implements Comparator
{
    ArrayList<Familia> familias = null;
    
    public Heuristica(ArrayList<String> valoresMatriz, ArrayList<Familia> fam, int numTecnica, int cantCriterios)
    {
        numeroDeTecnica = numTecnica;
        cantidadDeCriterios = cantCriterios;
        familias = fam;
        if(priorizacionCriterios == null)
        {
           cargarPriorizacionCriterios(valoresMatriz, cantidadDeCriterios);
        }
    }
    
    @Override
    public ArrayList<Familia> calcularResultados() 
    {
        for(int famIndex = 0; famIndex < familias.size(); famIndex++)
        {
            for(int critIndex = 0; critIndex < cantidadDeCriterios; critIndex++)
            {
                Familia famActual = familias.get(famIndex);
                famActual.agregarPuntaje(numeroDeTecnica, critIndex, famActual.calcularPuntajes(critIndex));
            }
        }
        ArrayList<Familia> famOrd = (ArrayList)familias.clone();
        Collections.sort(famOrd, this);
        return famOrd;
    }

    @Override
    public int compare(Object o1, Object o2) {
        int fam1 = 0;
        int fam2 = 0;
        for(int index = 0; index < cantidadDeCriterios; index++)
        {
            fam1 += ((Familia)o1).obtenerPuntaje(numeroDeTecnica, index);
            fam2 += ((Familia)o2).obtenerPuntaje(numeroDeTecnica, index);
        }
        return fam2-fam1;
    }
}
